home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / simcode.arc / ARGLIST.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1984-05-20  |  1.8 KB  |  83 lines

  1. {$symtab-,$linesize:131,$pagesize:86,
  2. $title:'ARGLIST.PAS -- "argc/argv" for PASCAL'}
  3. {    COPYRIGHT @ 1982
  4.     Jim Holtman and Eric Holtman
  5.     35 Dogwood Trail
  6.     Randolph, NJ 07869
  7.     (201) 361-3395
  8. }
  9. {$include:'arglist.inc'}
  10. implementation of arglist;
  11. const
  12.     BLANK = ' ';
  13.     QUOTE = '''';
  14. var
  15.     argvlist : array[1..20] of ^lstring;
  16.     newparm, parmlist : lstring(100);
  17.     i,j : integer;
  18.     state : (leading_ws,non_quote,quoted,end_quote);
  19.     inchar : char;
  20. function ppmuqq(u1 : word; u2 : adrmem; var dest : lstring) : word;
  21.     external;
  22.  
  23. procedure argv;
  24. begin
  25.     if (i > 0) and (i <= argc) then copylst(argvlist[i]^,a)
  26.     else copylst(null,a)
  27. end;
  28.  
  29. procedure saveparm;
  30. begin
  31.     argc := argc+1;
  32.     new(argvlist[argc],ord(newparm.len));
  33.     copylst(newparm,argvlist[argc]^);
  34.     newparm.len := 0;
  35. end;
  36.  
  37. begin
  38.     argc := 0;
  39.     eval(ppmuqq(0,adr null,parmlist));
  40.     if parmlist.len = 0 then return;
  41.     concat(parmlist,BLANK);
  42.     state := leading_ws;
  43.     newparm.len := 0;
  44.     for i := 1 to ord(parmlist.len) do begin
  45.     inchar := parmlist[i];
  46.     case state of
  47.  
  48.     leading_ws:
  49.         if inchar = QUOTE then state := quoted
  50.         else if inchar <> BLANK then begin
  51.         copylst(inchar,newparm);
  52.         state := non_quote
  53.         end;
  54.  
  55.     non_quote:
  56.         if inchar = BLANK then begin
  57.         saveparm;
  58.         state := leading_ws
  59.         end
  60.         else concat(newparm,inchar);
  61.  
  62.     quoted:
  63.         if inchar = QUOTE then state := end_quote
  64.         else concat(newparm,inchar);
  65.  
  66.     end_quote:
  67.         if inchar = QUOTE then begin
  68.         concat(newparm,inchar);
  69.         state := quoted
  70.         end
  71.         else if inchar <> BLANK then begin
  72.         concat(newparm,inchar);
  73.         state := non_quote
  74.         end
  75.         else begin
  76.         saveparm;
  77.         state := leading_ws
  78.         end;
  79.  
  80.     end;
  81.     end;
  82. end.
  83.